<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // Object的方法新增 (构造函数Object自己使用)

    // Object.defineProperty()
    // Object.defineProperties()
    // Object.getOwnPropertyDescriptor()
    // Object.getOwnPropertyDescriptors()


    // Object.is(arg1,arg2)    比较两个值是否相等 => （同值相等）算法
    // Object.is与严格比较运算符（===）的行为基本一致。 不同之处只有两个：一是+0不等于-0，二是NaN等于自身。

    // ===
    // console.log("a" === "a"); // true
    // console.log(1 === 1);   // true
    // console.log(true === true);  // true
    // console.log(null === null);  // true
    // console.log(+0  === -0);  // true
    // console.log(NaN === NaN); // false

    // Object.is() 普通用法,类似===
    // console.log(Object.is("a","a"));
    // console.log(Object.is(1,1));
    // console.log(Object.is(true,true));
    // console.log(Object.is(null,null));
    // console.log(Object.is([],[]));

    // 区别
    // console.log(Object.is(NaN,NaN)); // true  此方法可以判读数据是否是NaN
    // console.log(Object.is(+0,-0)); // false   +0和-0是两个不同的值
    

    // Object.assign(target, source1, source2 ... sourceN)    用于对象的合并，将源对象（source）的所有可枚举属性，复制到目标对象（target）。
    // Object.assign()方法的第一个参数是目标对象，后面的参数都是源对象。
    // 返回值: 目标对象

    // var a = {a:1};
    // var b = {b:2};
    // var c = {c:3};
    // var d = {d:4};

    // // var obj = {...a,...b,...c,...d}; // 把a  b  c  d 对象的属性复制到新对象中 (原对象没有影响)

    // var result = Object.assign(a,b,c,d); // 把 b  c  d   对象的属性复制到a对象中 (a对象会收到影响)
    // console.log(result);
    // console.log(a,b,c,d);
    // console.log(result === a);


    // Object.keys()，Object.values()，Object.entries()
    // Object.keys()  传入一个对象,返回对象中所有键名的集合
    // Object.values()  传入一个对象,返回对象中所有键值的集合
    // Object.entries()  传入一个对象,返回对象中所有键值对的集合

    var zhang = {name:"张三",age:18,height:"177cm",weight:"60kg"};

    // var keysList = []
    // var valuesList = [];
    // var entriesList = [];

    // for(var key in zhang){
    //     var val = zhang[key];
    //     keysList.push(key);
    //     valuesList.push(val);
    //     entriesList.push([key,val])
    // }

    // console.log(keysList);
    // console.log(valuesList);
    // console.log(entriesList);

    console.log(Object.keys(zhang));
    console.log(Object.values(zhang));
    console.log(Object.entries(zhang));


    // Object.fromEntries()  将键值对的数组转化为对象

    // var list = [['name', '张三'],['age', 18],['height', '177cm'],['weight', '60kg']];
    // var obj = Object.fromEntries(list);
    // console.log(obj);

    

    // Object.hasOwn(target,key)  判断是否为自身的属性 (判断某个对象上是否存在某个属性)

    var zhang = {name:"张三",age:18,height:"177cm",weight:"60kg"};

    console.log(Object.hasOwn(zhang,"name"));










</script>
</html>